<?php


namespace App\Services;

use App\Models\CategoryModel;

class CategoryService
{
    /**
     * 获取所有的栏目
     * @return array
     */
    public function getAll(): array
    {
        return CategoryModel::select(['id', 'name', 'parent_id'])
            ->orderBy('sort')
            ->get()->toArray();
    }

    /**
     * 获取所有栏目的树形结构
     * @return array
     */
    public function getTree(): array
    {
        $categories = $this->getAll();
        // 生成以id为key的数组
        $categories = array_column($categories, null, 'id');
        $tree = [];
        foreach ($categories as $item) {
            // 是否有父级，有则将其引用放到其父级的children中。
            if (isset($categories[$item['parent_id']])) {
                $categories[$item['parent_id']]['children'][] = &$categories[$item['id']];
            } else {
                // 没有父级，则将其引用放到最外成数组中。
                $tree[] = &$categories[$item['id']];
            }
        }
        return $tree;
    }


}
